package biblioteca;

//import com.sun.istack.internal.logging.Logger;
import java.io.*;
import java.net.*;
//import java.util.*;
import java.sql.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import javax.swing.*;
/*
 *
 * @author Gabriel
 */

public class acessoBanco {

    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/mydb";
    String user = "root";
    String pwd = "root";
    public Connection conn = null;
    InetAddress endereco = null;

    public boolean verificaInternet() throws IOException {
        try {
            endereco = InetAddress.getByName("localhost");
            int timeout = 5000;
            if (endereco.isReachable(timeout)) {
                System.out.println("Funcionou!");
                return true;
            } else {
                System.out.println("O servidor do Banco de dados não pôde ser atingido.");
                JOptionPane.showMessageDialog(null, "Não consegui conectar ao banco de dados!", "ATENÇÃO", JOptionPane.WARNING_MESSAGE);
                return false;
            }
        } catch (UnknownHostException ex) {
//Logger.getLogger(acessoBanco.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public void conectar() throws IOException {
        if (verificaInternet()) {
            try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, user, pwd);
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, "Excessão Classe não encontrada '" + e + "", "ATENÇÃO", JOptionPane.WARNING_MESSAGE);
                e.printStackTrace();
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, "SQL Exception... Erro na consulta: '" + e + "", "ATENÇÃO", JOptionPane.WARNING_MESSAGE);
                e.printStackTrace();
            } finally {
            }
        }
    }

    public void emprestimo(int idLivro, int idUser, String data) throws IOException, SQLException, ParseException {
        
        acessoBanco bd = new acessoBanco();
        PreparedStatement stm = null;
        bd.conectar();
        java.util.Date datdata;
        java.sql.Date sqlDate;
        // ________________________________________
        try {   
        //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss");
        datdata = sdf.parse(data+" 00:00:00");
        sqlDate = new Date(datdata.getTime());                 
        //System.out.println(sqlDate);
        } catch (ParseException ex) {
            throw new RuntimeException(ex);
        }
        // ________________________________________        

        String query = "insert into emprestimo (idLivro,'data', idUsuario , stat, idFuncionario) values (" + String.valueOf(idLivro) + "," + sqlDate + " ," + String.valueOf(idUser) + ", true" + ", 1)";
        try {
            stm = bd.conn.prepareStatement(query);
        } catch (SQLException ex) {
            java.util.logging.Logger.getLogger(acessoBanco.class.getName()).log(Level.SEVERE, null, ex);
        }
        stm.executeUpdate();
//insert into emprestimo (idLivro, idUsuario, 'Data', idFuncionario, stat) values
//(idlivro, idusuario, "'"+ data +"'", idfunc, true)

        bd.conn.close();
    }

    public void devolucao(Livro l, Usuario u, String data) {
        try {
            acessoBanco bd = new acessoBanco();
            PreparedStatement stm = null;
            bd.conectar();
            String query = "UPDATE emprestimo"
                    + "SET stat=false"
                    + "where idlivro = " + String.valueOf(l.getIdLivro())
                    + " AND idusuario = " + String.valueOf(u.getIdUsuario())
                    + "AND 'data' = " + data;
            stm = bd.conn.prepareStatement(query);
            stm.executeUpdate();
            bd.conn.close();
        } catch (IOException | SQLException ex) {
            java.util.logging.Logger.getLogger(Biblioteca.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
